package com.example.baiguangsystem.vo;

import lombok.Data;

/**
 * 前端返回的数据类型格式
 *
 * @Author: 27641
 * @ProjectName: BaiGuangSystem
 * @Date: 2022/02/02/22:53
 * @noinspection SpellCheckingInspection
 */
@Data
public class ResultType<T> {

    /**
     * 响应码
     */
    private int code = 200;

    /**
     * 响应信息
     */
    private String msg;

    /**
     * 操作是否成功
     */
    private boolean success = true;

    /**
     * 响应数据
     */
    private T data;

    /**
     * 响应成功消息
     */
    public static <E> ResultType<E> success() {
        return success(null);
    }

    /**
     * 响应成功消息
     */
    public static <E> ResultType<E> success(E data) {
        return success(null, data);
    }

    /**
     * 响应成功消息
     */
    public static <E> ResultType<E> success(String msg, E data) {
        ResultType<E> r = new ResultType<>();
        r.setSuccess(true);
        r.setData(data);
        r.setMsg(msg);
        return r;
    }

    /**
     * 响应失败消息
     */
    public static ResultType<?> fail() {
        return fail(null);
    }

    /**
     * 响应失败消息
     */
    public static ResultType<?> fail(String errMsg) {
        return fail(errMsg, 500);
    }

    /**
     * 响应失败消息
     */
    public static ResultType<?> fail(String errMsg, int errCode) {
        return fail(errMsg, errCode, null);
    }

    /**
     * 响应失败消息
     */
    public static <E> ResultType<E> fail(String errMsg, int errCode, E data) {
        ResultType<E> r = new ResultType<>();
        r.setSuccess(false);
        r.setCode(errCode);
        r.setMsg(errMsg);
        r.setData(data);
        return r;
    }


}
